﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Tecnopez.Globals;
using BussinessLogicTecnoPez.Tipos_Comunes;
using System.Collections.Generic;
using BussinessLogicTecnoPez;
using Microsoft.Practices.EnterpriseLibrary.Validation;

namespace TecnoPezWeb.Modules.Tipos
{
    public partial class ABMTiposMonedas : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.Page.IsPostBack)
            {
                SetMode(PageMode.ListMode);
            }

            InicializarValidadores();
            InicializarGrilla();

            cmdEliminar.OnClientClick = "return confirm('Esta seguro de eliminar el registro?');";

            GenericMasterPage master = (GenericMasterPage)this.Master;
            master.Imagen = "../Styles/Icons/configurar.gif";
            master.Titulo = "Gestión de Tipos de Monedas";
            cargarGrilla();
            _lblError.Text = "";
        }

        private void SetMode(PageMode mode)
        {
            ViewState["PageMode"] = mode;
            switch (mode)
            {
                case PageMode.ListMode:
                    wzrABM.ActiveStepIndex = 0;
                    break;
                case PageMode.NewMode:
                    wzrABM.ActiveStepIndex = 1;
                    txtID.Enabled = false;
                    txtDescripcion.Enabled = true;
                    txtCotizacion.Enabled = true;
                    chkMonedaPatron.Enabled = true;
                    txtSimboloMoneda.Enabled = true;
                    cmdAceptar.Visible = true;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = false;
                    cmdEliminar.Enabled = false;
                    break;
                case PageMode.EditMode:
                    wzrABM.ActiveStepIndex = 1;
                    txtID.Enabled = false;
                    txtDescripcion.Enabled = true;
                    txtCotizacion.Enabled = true;
                    chkMonedaPatron.Enabled = true;
                    txtSimboloMoneda.Enabled = true;
                    cmdAceptar.Visible = true;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = false;
                    cmdEliminar.Enabled = false;
                    break;
                case PageMode.ViewMode:
                    wzrABM.ActiveStepIndex = 1;
                    txtID.Enabled = false;
                    txtDescripcion.Enabled = false;
                    txtCotizacion.Enabled = false;
                    chkMonedaPatron.Enabled = false;
                    txtSimboloMoneda.Enabled = false;
                    cmdAceptar.Visible = false;
                    cmdCancelar.Enabled = true;
                    cmdEditar.Enabled = true;
                    cmdEliminar.Enabled = true;
                    break;
            }
        }

        private void InicializarValidadores()
        {
            PPVDescripcion.SourceTypeName = "BussinessLogicTecnoPez.Tipos_Comunes.TipoMoneda";
            PPVDescripcion.ControlToValidate = "txtDescripcion";
            PPVDescripcion.PropertyName = "Descripcion";
            PPVDescripcion.DisplayMode = ValidationSummaryDisplayMode.List;

            PPVSimboloMoneda.SourceTypeName = "BussinessLogicTecnoPez.Tipos_Comunes.TipoMoneda";
            PPVSimboloMoneda.ControlToValidate = "txtSimboloMoneda";
            PPVSimboloMoneda.PropertyName = "SimboloMoneda";
            PPVSimboloMoneda.DisplayMode = ValidationSummaryDisplayMode.List;
        }

        private void InicializarGrilla()
        {
            grdTiposMonedas.setupGrid<TipoMoneda>(cargarGrilla, seleccionarTipoMoneda, null, true, this.ViewState);
        }

        private void seleccionarTipoMoneda(int o)
        {
            int IdTipo = int.Parse(grdTiposMonedas.grdDatosAbmView.DataKeys[o].Value.ToString());
            TipoMoneda.getManager.ClearFilters();
            TipoMoneda.getManager.AddFilter("IDTIPOMONEDA", GenericManager<TipoMoneda>.filterOperator.Equals, IdTipo);
            TipoMoneda objTipo = TipoMoneda.getManager.GetOne();
            txtID.Text = objTipo.IdTipoMoneda.ToString();
            txtDescripcion.Text = objTipo.Descripcion.Trim();
            txtCotizacion.Text = objTipo.Cotizacion.ToString();
            chkMonedaPatron.Checked = objTipo.EsPatron;
            txtSimboloMoneda.Text = objTipo.SimboloMoneda.Trim();

            SetMode(PageMode.ViewMode);
        }

        private void cargarGrilla()
        {
            TipoMoneda.getManager.ClearFilters();
            TipoMoneda.getManager.ClearOrders();
            TipoMoneda.getManager.AddFilter("Descripcion", GenericManager<TipoMoneda>.filterOperator.Like, "%" + txtBuscarDescripcion.Text.Trim() + "%");

            List<TipoMoneda> lista = new List<TipoMoneda>();
            lista = TipoMoneda.getManager.GetFilter();
            grdTiposMonedas.grdDatosAbmView.DataSource = lista;
            grdTiposMonedas.grdDatosAbmView.DataBind();
        }

        protected void cmdNuevo_Click(object sender, EventArgs e)
        {
            txtID.Text = "";
            txtDescripcion.Text = "";
            txtCotizacion.Text = "";
            chkMonedaPatron.Checked = false;
            txtSimboloMoneda.Text = "";
            SetMode(PageMode.NewMode);
        }
        protected void cmdEditar_Click(object sender, EventArgs e)
        {
            SetMode(PageMode.EditMode);
        }
        protected void cmdEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                TipoMoneda objTipoMoneda = new TipoMoneda();

                objTipoMoneda.IdTipoMoneda = int.Parse(txtID.Text.ToUpper().Trim());
                if (TipoMoneda.getManager.Delete(objTipoMoneda) < 1)
                {
                    throw TipoMoneda.getManager.GeneratedException;
                }
                SetMode(PageMode.ListMode);
                cargarGrilla();
            }
            catch (Exception exc)
            {
                _lblError.Text = "error: No se pudo realizar la operación";
                Functions.LogError(exc);
                SetMode(PageMode.ListMode);
            }
        }
        protected void cmdAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                TipoMoneda objTipoMoneda = new TipoMoneda();
                objTipoMoneda.Descripcion = txtDescripcion.Text.Trim();
                
                decimal cotizacion;
                if (decimal.TryParse(txtCotizacion.Text.Trim(), out cotizacion))
                    objTipoMoneda.Cotizacion = cotizacion;
                else
                    objTipoMoneda.Cotizacion = 0;

                objTipoMoneda.EsPatron = chkMonedaPatron.Checked;
                objTipoMoneda.SimboloMoneda = txtSimboloMoneda.Text.Trim();

                if (validar(objTipoMoneda))
                {
                    if (objTipoMoneda.EsPatron && objTipoMoneda.setNotPatron()<0)
                        throw new TecnoPezWEBException("No se pudo establecer la moneda patrón.");

                    if (getMode() == PageMode.NewMode)
                    {
                        if (TipoMoneda.getManager.Insert(objTipoMoneda) != true)
                        {
                            throw TipoMoneda.getManager.GeneratedException;
                        }
                        SetMode(PageMode.ListMode);
                        cargarGrilla();
                    }
                    else
                    {
                        objTipoMoneda.IdTipoMoneda = int.Parse(txtID.Text.ToUpper().Trim());
                        if (TipoMoneda.getManager.Update(objTipoMoneda) != true)
                        {
                            throw TipoMoneda.getManager.GeneratedException;
                        }
                        SetMode(PageMode.ViewMode);
                    }
                }
            }
            catch (Exception exc)
            {
                _lblError.Text = "error: No se pudo realizar la operación";
                Functions.LogError(exc);
                SetMode(PageMode.NewMode);
            }
        }

        private bool validar(TipoMoneda objeto)
        {
            ValidationResults v = Validation.Validate<TipoMoneda>(objeto);
            if (!v.IsValid)
            {
                _lblError.Text = "Error en el formulario: Por favor verifique los campos ingresados.";
            }
            return v.IsValid;
        }

        private PageMode getMode()
        {
            if (ViewState["PageMode"] == null)
                return PageMode.ModeNotFound;
            return (PageMode)ViewState["PageMode"];
        }

        protected void cmdCancelar_Click(object sender, EventArgs e)
        {
            SetMode(PageMode.ListMode);
        }
}
}